1 Streszczenie

Celem niniejszego raportu jest analiza czynników wpływających na pojemność superkondensatorów oraz budowa modelu predykcyjnego opartego na danych z 925 wierszy. Zbiór danych poddano czyszczeniu, usunięto zbędne zmienne tekstowe, zakodowano konfigurację ogniwa oraz uzupełniono liczne braki, aby umożliwić dalszą analizę. W części eksploracyjnej zbadano rozkłady wartości, zależności między atrybutami oraz występowanie braków, co pozwoliło lepiej zrozumieć strukturę danych. Przeprowadzono analizę korelacji oraz wizualizacje ilustrujące główne trendy dotyczące m.in. gęstości prądu, powierzchni właściwej i składu materiałowego. Następnie wykonano analizę skupień w celu identyfikacji grup materiałów o podobnych właściwościach oraz zbudowano model predykcyjny metodą Random Forest, oceniając jego skuteczność i najważniejsze cechy wpływające na wynik.

2 Wylistowanie bibliotek oraz ustawienie seeda

library(ggcorrplot)
library(tidyr) 
library(readr)
library(dplyr)
library(ggtern)
library(ggplot2)
library(janitor)
library(plotly)
library(caret)
library(factoextra)  
library(fpc)         
library(NbClust)     
library(viridis)
print("Liczba używanych bibliotek:")
## [1] "Liczba używanych bibliotek:"
length(sessionInfo()$otherPkgs)
## [1] 15
set.seed(1234)

3 Wczytanie i przygotowanie danych

raw_data <- read_csv("data.csv")
## Rows: 925 Columns: 21
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (5): Ref., Limits of Potential Window (V), Electrode Configuration, Ele...
## dbl (16): Lower Limit of Potential Window (V), Upper Limit of Potential Wind...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
glimpse(raw_data)
## Rows: 925
## Columns: 21
## $ Ref.                                              <chr> "DOI: 10.1039/c7ta03…
## $ `Limits of Potential Window (V)`                  <chr> "0 to 0.8", "0 to 1"…
## $ `Lower Limit of Potential Window (V)`             <dbl> 0.0, 0.0, 0.0, 0.0, …
## $ `Upper Limit of Potential Window (V)`             <dbl> 0.80, 1.00, 1.00, 1.…
## $ `Potential Window (V)`                            <dbl> 0.80, 1.00, 1.00, 1.…
## $ `Current Density (A/g)`                           <dbl> 1.0, 1.0, 2.0, 5.0, …
## $ `Capacitance (F/g)`                               <dbl> 680, 367, 338, 283, …
## $ `Specific Surface Area (m^2/g)`                   <dbl> 186.3, 537.0, 537.0,…
## $ `Charge Transfer Resistance (Rct) (ohm)`          <dbl> NA, 6.1, 6.1, 6.1, 6…
## $ `Equivalent Series Resistance (Rs) (ohm)`         <dbl> 7.70, 1.95, 1.95, 1.…
## $ `Electrode Configuration`                         <chr> "CNF/RGO/moOxNy", "s…
## $ `Pore Size (nm)`                                  <dbl> NA, NA, NA, NA, NA, …
## $ `Pore Volume (cm^3/g)`                            <dbl> NA, NA, NA, NA, NA, …
## $ `Ratio of ID/IG`                                  <dbl> 1.450, 1.280, 1.280,…
## $ `N at%`                                           <dbl> 2.1, 0.0, 0.0, 0.0, …
## $ `C at%`                                           <dbl> NA, 85.6, 85.6, 85.6…
## $ `O at%`                                           <dbl> NA, 9.1, 9.1, 9.1, 9…
## $ `Electrolyte Chemical Formula`                    <chr> "H2SO4", "KOH", "KOH…
## $ `Electrolyte Ionic Conductivity`                  <dbl> 7, 6, 6, 6, 6, 6, NA…
## $ `Electrolyte Concentration (M)`                   <dbl> 1.0, 6.0, 6.0, 6.0, …
## $ `Cell Configuration (three/two electrode system)` <chr> "three-electrode sys…
head(raw_data)

3.1 Czyszczenie nazw kolumn

data <- raw_data %>%
clean_names()


names(data)
##  [1] "ref"                                          
##  [2] "limits_of_potential_window_v"                 
##  [3] "lower_limit_of_potential_window_v"            
##  [4] "upper_limit_of_potential_window_v"            
##  [5] "potential_window_v"                           
##  [6] "current_density_a_g"                          
##  [7] "capacitance_f_g"                              
##  [8] "specific_surface_area_m_2_g"                  
##  [9] "charge_transfer_resistance_rct_ohm"           
## [10] "equivalent_series_resistance_rs_ohm"          
## [11] "electrode_configuration"                      
## [12] "pore_size_nm"                                 
## [13] "pore_volume_cm_3_g"                           
## [14] "ratio_of_id_ig"                               
## [15] "n_at_percent"                                 
## [16] "c_at_percent"                                 
## [17] "o_at_percent"                                 
## [18] "electrolyte_chemical_formula"                 
## [19] "electrolyte_ionic_conductivity"               
## [20] "electrolyte_concentration_m"                  
## [21] "cell_configuration_three_two_electrode_system"

Nazwy kolumn są porządkowane do postaci snake_case, co ułatwia późniejszą pracę z danymi.

3.2 Usunięcie danych niepotrzebnych i label encoding

char_cols <- names(data)[sapply(data, is.character)]
char_cols_keep <- "cell_configuration_three_two_electrode_system"

data <- data %>%
select(-all_of(setdiff(char_cols, char_cols_keep)))

data <- data %>%
mutate(
cell_configuration_three_two_electrode_system_encoded =
as.numeric(as.factor(cell_configuration_three_two_electrode_system))
)

data <- data%>%select(-cell_configuration_three_two_electrode_system,-potential_window_v)

W tej części usunięto z danych wszystkie zmienne tekstowe poza informacją o konfiguracji ogniwa, ponieważ pozostałe kolumny znakowe nie wnosiły wartości do dalszej analizy. Następnie dokonano kodowania etykietowego konfiguracji ogniwa ze względu na tylko dwa systemy elekrod. Dodatkowo usunięto zmienną potential_window_v, aby uniknąć redundancji, ponieważ jest to różnica między Lower Limit of Potential Window (V) oraz Upper Limit of Potential Window (V).

3.3 Ilość pustych wartości dla każdej kolumny

missing_tbl <- sapply(data, function(x) sum(is.na(x))) %>%
sort(decreasing = TRUE)

missing_tbl
##                    charge_transfer_resistance_rct_ohm 
##                                                   786 
##                   equivalent_series_resistance_rs_ohm 
##                                                   772 
##                                          pore_size_nm 
##                                                   769 
##                                    pore_volume_cm_3_g 
##                                                   729 
##                                          o_at_percent 
##                                                   703 
##                                          c_at_percent 
##                                                   699 
##                                          n_at_percent 
##                                                   690 
##                                        ratio_of_id_ig 
##                                                   596 
##                           specific_surface_area_m_2_g 
##                                                   572 
##                        electrolyte_ionic_conductivity 
##                                                    99 
##                           electrolyte_concentration_m 
##                                                    62 
##                                       capacitance_f_g 
##                                                    17 
##                                   current_density_a_g 
##                                                    16 
## cell_configuration_three_two_electrode_system_encoded 
##                                                    14 
##                     lower_limit_of_potential_window_v 
##                                                     4 
##                     upper_limit_of_potential_window_v 
##                                                     4
missing_df <- tibble(
variable = names(missing_tbl),
missing = as.numeric(missing_tbl)
)

ggplot(missing_df, aes(x = reorder(variable, missing), y = missing)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(
x = "Zmienna",
y = "Liczba brakujących wartości",
title = "Brakujące dane w zbiorze"
)

Wykres braków danych pokazuje wyraźnie, że największe ubytki dotyczą parametrów związanych z opornością oraz strukturą porowatości materiałów. Brakuje przede wszystkim informacji o oporze transferu ładunku (Rct), szeregowym oporze wewnętrznym (Rs), rozmiarze porów i objętości porów. Dane dotyczące składu pierwiastkowego (N, C, O) również pojawiają się w sposób niepełny, co ogranicza możliwości pełnej analizy chemicznej.

3.4 Zastąpienie pustych wartości zerami

data[data == ""] <- NA
data <- data %>% mutate(across(everything(), ~replace_na(., 0)))

Wszystkie brakujące wartości zostały zastąpione zerami, aby umożliwić dalszą obróbkę danych i uniknąć problemów podczas analiz. Przyjęto założenie, że jeśli dana wartość nie została podana, to można traktować ją jako równą zero. Warto jednak podkreślić, że w wielu kolumnach braków było bardzo dużo, co pokazuje, że zbiór danych nie został przygotowany w sposób kompletny i może wymagać ostrożności przy interpretacji wyników.

4 Podsumowanie danych

summary(data)
##  lower_limit_of_potential_window_v upper_limit_of_potential_window_v
##  Min.   :-1.1000                   Min.   :-0.2000                  
##  1st Qu.:-0.3000                   1st Qu.: 0.4000                  
##  Median : 0.0000                   Median : 0.6000                  
##  Mean   :-0.2333                   Mean   : 0.6274                  
##  3rd Qu.: 0.0000                   3rd Qu.: 0.8000                  
##  Max.   : 0.2000                   Max.   : 3.5000                  
##  current_density_a_g capacitance_f_g  specific_surface_area_m_2_g
##  Min.   :  0.000     Min.   :   0.0   Min.   :   0.00            
##  1st Qu.:  1.000     1st Qu.: 143.5   1st Qu.:   0.00            
##  Median :  2.000     Median : 255.0   Median :   0.00            
##  Mean   :  5.756     Mean   : 407.9   Mean   : 159.30            
##  3rd Qu.:  5.000     3rd Qu.: 493.6   3rd Qu.:  83.11            
##  Max.   :200.000     Max.   :3344.1   Max.   :2400.00            
##  charge_transfer_resistance_rct_ohm equivalent_series_resistance_rs_ohm
##  Min.   : 0.0000                    Min.   : 0.0000                    
##  1st Qu.: 0.0000                    1st Qu.: 0.0000                    
##  Median : 0.0000                    Median : 0.0000                    
##  Mean   : 0.4581                    Mean   : 0.2649                    
##  3rd Qu.: 0.0000                    3rd Qu.: 0.0000                    
##  Max.   :24.2000                    Max.   :17.5000                    
##   pore_size_nm    pore_volume_cm_3_g ratio_of_id_ig    n_at_percent   
##  Min.   : 0.000   Min.   :0.0000     Min.   :0.0000   Min.   : 0.000  
##  1st Qu.: 0.000   1st Qu.:0.0000     1st Qu.:0.0000   1st Qu.: 0.000  
##  Median : 0.000   Median :0.0000     Median :0.0000   Median : 0.000  
##  Mean   : 1.453   Mean   :0.1029     Mean   :0.3986   Mean   : 0.635  
##  3rd Qu.: 0.000   3rd Qu.:0.0000     3rd Qu.:1.0000   3rd Qu.: 0.000  
##  Max.   :44.131   Max.   :2.3500     Max.   :2.9000   Max.   :23.820  
##   c_at_percent    o_at_percent    electrolyte_ionic_conductivity
##  Min.   : 0.00   Min.   : 0.000   Min.   :0.000                 
##  1st Qu.: 0.00   1st Qu.: 0.000   1st Qu.:5.000                 
##  Median : 0.00   Median : 0.000   Median :6.000                 
##  Mean   :16.25   Mean   : 4.602   Mean   :5.185                 
##  3rd Qu.: 0.00   3rd Qu.: 0.000   3rd Qu.:7.000                 
##  Max.   :98.10   Max.   :54.280   Max.   :8.000                 
##  electrolyte_concentration_m
##  Min.   :0.000              
##  1st Qu.:1.000              
##  Median :1.000              
##  Mean   :2.403              
##  3rd Qu.:6.000              
##  Max.   :6.000              
##  cell_configuration_three_two_electrode_system_encoded
##  Min.   :0.000                                        
##  1st Qu.:1.000                                        
##  Median :1.000                                        
##  Mean   :1.181                                        
##  3rd Qu.:1.000                                        
##  Max.   :2.000

5 Prezentacja rozkładów wartości

for (col in names(data)) {
  
  p_hist <- ggplot(data, aes_string(x = col)) +
    geom_density(fill = "steelblue", color = "white") +
    theme_minimal() +
    labs(
      title = paste("Gęstość wartości dla :", col),
      x = col,
      y = "Liczność"
    )
  
  print(p_hist)
}

Rozkłady wartości pokazują dużą zmienność danych oraz liczne braki w wielu zmiennych, co utrudnia jednoznaczną interpretację wyników. Wiele parametrów ma rozkład silnie skośny — większość obserwacji skupia się na niskich wartościach, a wysokie pojawiają się rzadko. Dla analityka oznacza to konieczność ostrożnego podejścia do dalszych analiz, ponieważ niepełność i nierównomierne rozłożenie danych mogą wpływać na wiarygodność wniosków i modeli predykcyjnych.

6 Korelacja

corr_vars <- data 





corr_matrix <- cor(corr_vars)
corr_matrix
##                                                       lower_limit_of_potential_window_v
## lower_limit_of_potential_window_v                                            1.00000000
## upper_limit_of_potential_window_v                                            0.63050009
## current_density_a_g                                                          0.04063774
## capacitance_f_g                                                              0.17218894
## specific_surface_area_m_2_g                                                 -0.01938885
## charge_transfer_resistance_rct_ohm                                          -0.05098065
## equivalent_series_resistance_rs_ohm                                         -0.07424578
## pore_size_nm                                                                -0.12148153
## pore_volume_cm_3_g                                                          -0.15716357
## ratio_of_id_ig                                                              -0.09219450
## n_at_percent                                                                -0.07713330
## c_at_percent                                                                -0.18891532
## o_at_percent                                                                -0.13713933
## electrolyte_ionic_conductivity                                               0.11238299
## electrolyte_concentration_m                                                 -0.24850914
## cell_configuration_three_two_electrode_system_encoded                        0.22442690
##                                                       upper_limit_of_potential_window_v
## lower_limit_of_potential_window_v                                           0.630500088
## upper_limit_of_potential_window_v                                           1.000000000
## current_density_a_g                                                         0.028161951
## capacitance_f_g                                                            -0.104759952
## specific_surface_area_m_2_g                                                 0.304761888
## charge_transfer_resistance_rct_ohm                                          0.008468736
## equivalent_series_resistance_rs_ohm                                         0.046674443
## pore_size_nm                                                               -0.095671653
## pore_volume_cm_3_g                                                          0.075519966
## ratio_of_id_ig                                                             -0.016637044
## n_at_percent                                                               -0.044978633
## c_at_percent                                                                0.124119724
## o_at_percent                                                               -0.086430282
## electrolyte_ionic_conductivity                                              0.083388496
## electrolyte_concentration_m                                                -0.296626252
## cell_configuration_three_two_electrode_system_encoded                       0.450469081
##                                                       current_density_a_g
## lower_limit_of_potential_window_v                             0.040637737
## upper_limit_of_potential_window_v                             0.028161951
## current_density_a_g                                           1.000000000
## capacitance_f_g                                               0.003668344
## specific_surface_area_m_2_g                                   0.080323102
## charge_transfer_resistance_rct_ohm                           -0.041826102
## equivalent_series_resistance_rs_ohm                          -0.016796777
## pore_size_nm                                                 -0.046987602
## pore_volume_cm_3_g                                            0.059111785
## ratio_of_id_ig                                               -0.051410953
## n_at_percent                                                 -0.011777917
## c_at_percent                                                 -0.039843222
## o_at_percent                                                 -0.006460292
## electrolyte_ionic_conductivity                               -0.069069899
## electrolyte_concentration_m                                   0.054069337
## cell_configuration_three_two_electrode_system_encoded         0.005226627
##                                                       capacitance_f_g
## lower_limit_of_potential_window_v                         0.172188943
## upper_limit_of_potential_window_v                        -0.104759952
## current_density_a_g                                       0.003668344
## capacitance_f_g                                           1.000000000
## specific_surface_area_m_2_g                              -0.166651829
## charge_transfer_resistance_rct_ohm                       -0.071988544
## equivalent_series_resistance_rs_ohm                      -0.053998611
## pore_size_nm                                             -0.085612879
## pore_volume_cm_3_g                                       -0.087206242
## ratio_of_id_ig                                           -0.059339700
## n_at_percent                                              0.033879041
## c_at_percent                                             -0.117738588
## o_at_percent                                              0.104617077
## electrolyte_ionic_conductivity                            0.064289883
## electrolyte_concentration_m                               0.050316863
## cell_configuration_three_two_electrode_system_encoded    -0.177386448
##                                                       specific_surface_area_m_2_g
## lower_limit_of_potential_window_v                                    -0.019388854
## upper_limit_of_potential_window_v                                     0.304761888
## current_density_a_g                                                   0.080323102
## capacitance_f_g                                                      -0.166651829
## specific_surface_area_m_2_g                                           1.000000000
## charge_transfer_resistance_rct_ohm                                   -0.011098820
## equivalent_series_resistance_rs_ohm                                   0.059119315
## pore_size_nm                                                          0.053501765
## pore_volume_cm_3_g                                                    0.441080212
## ratio_of_id_ig                                                       -0.007104682
## n_at_percent                                                          0.015221388
## c_at_percent                                                          0.255758903
## o_at_percent                                                         -0.017657860
## electrolyte_ionic_conductivity                                       -0.017146514
## electrolyte_concentration_m                                           0.087485006
## cell_configuration_three_two_electrode_system_encoded                 0.211538077
##                                                       charge_transfer_resistance_rct_ohm
## lower_limit_of_potential_window_v                                          -0.0509806515
## upper_limit_of_potential_window_v                                           0.0084687365
## current_density_a_g                                                        -0.0418261023
## capacitance_f_g                                                            -0.0719885435
## specific_surface_area_m_2_g                                                -0.0110988199
## charge_transfer_resistance_rct_ohm                                          1.0000000000
## equivalent_series_resistance_rs_ohm                                         0.6079357619
## pore_size_nm                                                                0.0943174653
## pore_volume_cm_3_g                                                         -0.0395178752
## ratio_of_id_ig                                                              0.1401227615
## n_at_percent                                                               -0.0009477786
## c_at_percent                                                                0.1525767183
## o_at_percent                                                                0.2726497683
## electrolyte_ionic_conductivity                                              0.0472682103
## electrolyte_concentration_m                                                -0.1048152126
## cell_configuration_three_two_electrode_system_encoded                      -0.0709667404
##                                                       equivalent_series_resistance_rs_ohm
## lower_limit_of_potential_window_v                                             -0.07424578
## upper_limit_of_potential_window_v                                              0.04667444
## current_density_a_g                                                           -0.01679678
## capacitance_f_g                                                               -0.05399861
## specific_surface_area_m_2_g                                                    0.05911932
## charge_transfer_resistance_rct_ohm                                             0.60793576
## equivalent_series_resistance_rs_ohm                                            1.00000000
## pore_size_nm                                                                   0.03656004
## pore_volume_cm_3_g                                                             0.04581745
## ratio_of_id_ig                                                                 0.11689204
## n_at_percent                                                                   0.02432332
## c_at_percent                                                                   0.16532879
## o_at_percent                                                                   0.27053126
## electrolyte_ionic_conductivity                                                 0.09384396
## electrolyte_concentration_m                                                   -0.08843116
## cell_configuration_three_two_electrode_system_encoded                          0.07830807
##                                                       pore_size_nm
## lower_limit_of_potential_window_v                     -0.121481531
## upper_limit_of_potential_window_v                     -0.095671653
## current_density_a_g                                   -0.046987602
## capacitance_f_g                                       -0.085612879
## specific_surface_area_m_2_g                            0.053501765
## charge_transfer_resistance_rct_ohm                     0.094317465
## equivalent_series_resistance_rs_ohm                    0.036560038
## pore_size_nm                                           1.000000000
## pore_volume_cm_3_g                                     0.229027388
## ratio_of_id_ig                                        -0.028430353
## n_at_percent                                          -0.058182358
## c_at_percent                                          -0.006432067
## o_at_percent                                           0.012520595
## electrolyte_ionic_conductivity                        -0.078837487
## electrolyte_concentration_m                           -0.014765050
## cell_configuration_three_two_electrode_system_encoded -0.020538806
##                                                       pore_volume_cm_3_g
## lower_limit_of_potential_window_v                           -0.157163571
## upper_limit_of_potential_window_v                            0.075519966
## current_density_a_g                                          0.059111785
## capacitance_f_g                                             -0.087206242
## specific_surface_area_m_2_g                                  0.441080212
## charge_transfer_resistance_rct_ohm                          -0.039517875
## equivalent_series_resistance_rs_ohm                          0.045817455
## pore_size_nm                                                 0.229027388
## pore_volume_cm_3_g                                           1.000000000
## ratio_of_id_ig                                              -0.006598889
## n_at_percent                                                 0.096703485
## c_at_percent                                                 0.168067613
## o_at_percent                                                -0.018898090
## electrolyte_ionic_conductivity                              -0.093947644
## electrolyte_concentration_m                                  0.191900082
## cell_configuration_three_two_electrode_system_encoded        0.102044281
##                                                       ratio_of_id_ig
## lower_limit_of_potential_window_v                       -0.092194501
## upper_limit_of_potential_window_v                       -0.016637044
## current_density_a_g                                     -0.051410953
## capacitance_f_g                                         -0.059339700
## specific_surface_area_m_2_g                             -0.007104682
## charge_transfer_resistance_rct_ohm                       0.140122762
## equivalent_series_resistance_rs_ohm                      0.116892044
## pore_size_nm                                            -0.028430353
## pore_volume_cm_3_g                                      -0.006598889
## ratio_of_id_ig                                           1.000000000
## n_at_percent                                             0.023648243
## c_at_percent                                             0.106615045
## o_at_percent                                             0.054662567
## electrolyte_ionic_conductivity                           0.186849884
## electrolyte_concentration_m                              0.050157445
## cell_configuration_three_two_electrode_system_encoded    0.048310043
##                                                        n_at_percent
## lower_limit_of_potential_window_v                     -0.0771332968
## upper_limit_of_potential_window_v                     -0.0449786330
## current_density_a_g                                   -0.0117779174
## capacitance_f_g                                        0.0338790412
## specific_surface_area_m_2_g                            0.0152213881
## charge_transfer_resistance_rct_ohm                    -0.0009477786
## equivalent_series_resistance_rs_ohm                    0.0243233190
## pore_size_nm                                          -0.0581823583
## pore_volume_cm_3_g                                     0.0967034850
## ratio_of_id_ig                                         0.0236482429
## n_at_percent                                           1.0000000000
## c_at_percent                                           0.3565514005
## o_at_percent                                           0.2468826903
## electrolyte_ionic_conductivity                        -0.0989913218
## electrolyte_concentration_m                           -0.0214021493
## cell_configuration_three_two_electrode_system_encoded -0.0348339481
##                                                       c_at_percent o_at_percent
## lower_limit_of_potential_window_v                     -0.188915315 -0.137139325
## upper_limit_of_potential_window_v                      0.124119724 -0.086430282
## current_density_a_g                                   -0.039843222 -0.006460292
## capacitance_f_g                                       -0.117738588  0.104617077
## specific_surface_area_m_2_g                            0.255758903 -0.017657860
## charge_transfer_resistance_rct_ohm                     0.152576718  0.272649768
## equivalent_series_resistance_rs_ohm                    0.165328787  0.270531258
## pore_size_nm                                          -0.006432067  0.012520595
## pore_volume_cm_3_g                                     0.168067613 -0.018898090
## ratio_of_id_ig                                         0.106615045  0.054662567
## n_at_percent                                           0.356551400  0.246882690
## c_at_percent                                           1.000000000  0.420571987
## o_at_percent                                           0.420571987  1.000000000
## electrolyte_ionic_conductivity                         0.115467105  0.025287644
## electrolyte_concentration_m                            0.074817587  0.022279305
## cell_configuration_three_two_electrode_system_encoded  0.176837372 -0.045597510
##                                                       electrolyte_ionic_conductivity
## lower_limit_of_potential_window_v                                        0.112382988
## upper_limit_of_potential_window_v                                        0.083388496
## current_density_a_g                                                     -0.069069899
## capacitance_f_g                                                          0.064289883
## specific_surface_area_m_2_g                                             -0.017146514
## charge_transfer_resistance_rct_ohm                                       0.047268210
## equivalent_series_resistance_rs_ohm                                      0.093843964
## pore_size_nm                                                            -0.078837487
## pore_volume_cm_3_g                                                      -0.093947644
## ratio_of_id_ig                                                           0.186849884
## n_at_percent                                                            -0.098991322
## c_at_percent                                                             0.115467105
## o_at_percent                                                             0.025287644
## electrolyte_ionic_conductivity                                           1.000000000
## electrolyte_concentration_m                                              0.204780831
## cell_configuration_three_two_electrode_system_encoded                    0.008206978
##                                                       electrolyte_concentration_m
## lower_limit_of_potential_window_v                                     -0.24850914
## upper_limit_of_potential_window_v                                     -0.29662625
## current_density_a_g                                                    0.05406934
## capacitance_f_g                                                        0.05031686
## specific_surface_area_m_2_g                                            0.08748501
## charge_transfer_resistance_rct_ohm                                    -0.10481521
## equivalent_series_resistance_rs_ohm                                   -0.08843116
## pore_size_nm                                                          -0.01476505
## pore_volume_cm_3_g                                                     0.19190008
## ratio_of_id_ig                                                         0.05015744
## n_at_percent                                                          -0.02140215
## c_at_percent                                                           0.07481759
## o_at_percent                                                           0.02227930
## electrolyte_ionic_conductivity                                         0.20478083
## electrolyte_concentration_m                                            1.00000000
## cell_configuration_three_two_electrode_system_encoded                  0.02522224
##                                                       cell_configuration_three_two_electrode_system_encoded
## lower_limit_of_potential_window_v                                                               0.224426904
## upper_limit_of_potential_window_v                                                               0.450469081
## current_density_a_g                                                                             0.005226627
## capacitance_f_g                                                                                -0.177386448
## specific_surface_area_m_2_g                                                                     0.211538077
## charge_transfer_resistance_rct_ohm                                                             -0.070966740
## equivalent_series_resistance_rs_ohm                                                             0.078308068
## pore_size_nm                                                                                   -0.020538806
## pore_volume_cm_3_g                                                                              0.102044281
## ratio_of_id_ig                                                                                  0.048310043
## n_at_percent                                                                                   -0.034833948
## c_at_percent                                                                                    0.176837372
## o_at_percent                                                                                   -0.045597510
## electrolyte_ionic_conductivity                                                                  0.008206978
## electrolyte_concentration_m                                                                     0.025222238
## cell_configuration_three_two_electrode_system_encoded                                           1.000000000
ggcorrplot(
  corr_matrix,
  method = "square",
  type = "lower",
  lab = TRUE,
  lab_size = 3.5,
  tl.cex = 10,
  tl.srt = 45,
  colors = c("blue", "white", "red"),
  outline.color = "gray30",
  title = "Macierz korelacji"
)

Macierz korelacji wskazuje, że zależności liniowe między zmiennymi są stosunkowo słabe. Jednym z niewielu wyraźniejszych związków jest dodatnia korelacja między oporem transferu ładunku a szeregowym oporem wewnętrznym. Zmienna pojemność nie wykazuje jednak silnej zależności z żadną pojedynczą cechą, co sugeruje, że jej wartość wynika raczej z kombinacji wielu czynników niż z jednego dominującego parametru.

7 Analiza trendów

p_trend <- ggplot(
  data,
  aes(
    x = specific_surface_area_m_2_g,
    y = current_density_a_g,
    color = capacitance_f_g
  )
) +
  geom_point(alpha = 0.8, size = 3) +
  scale_color_viridis(option = "A") +
  theme_minimal() +
  labs(
    title = "Wpływ SSA i gęstości prądu na pojemność",
    x = "Specific surface area (m²/g)",
    y = "Current density (A/g)",
    color = "Capacitance (F/g)"
  )

ggplotly(p_trend)

Wykres zależności między powierzchnią właściwą a gęstością prądu, z kolorystycznym oznaczeniem pojemności, ujawnia, że najwyższe pojemności uzyskiwane są głównie przy niskich gęstościach prądu. Pojemność silnie spada, gdy gęstość prądu rośnie, niezależnie od wartości SSA.

data_tern <- data %>% 
  select(n_at_percent, o_at_percent, c_at_percent) %>% 
  na.omit()

p_tern_plotly <- plot_ly(
  data = data_tern,
  a = ~c_at_percent,
  b = ~n_at_percent,
  c = ~o_at_percent,
  type = "scatterternary",
  mode = "markers",
  marker = list(size = 6, opacity = 0.7, color = "steelblue")
) %>% 
  layout(
    title = list(
      text = "Wykres ternarny: proporcje tlenu, azotu i węgla w materiałach",
      y = 1.08  
    ),
    ternary = list(
      aaxis = list(title = "C (at. %)"),
      baxis = list(title = "N (at. %)"),
      caxis = list(title = "O (at. %)")
    ),
    margin = list(t = 100)  
  )


p_tern_plotly

Wykres ternarny pokazujący proporcje N–C–O pozwala dostrzec, że większość analizowanych materiałów ma bardzo wysoką zawartość węgla. Zawartość azotu jest zwykle niska, a tlen występuje w zróżnicowanych ilościach, bez wyraźnej tendencji.

p_cd_cap <- ggplot(
  data,
  aes(
    x = current_density_a_g,
    y = capacitance_f_g,
    color = electrolyte_concentration_m
  )
) +
  geom_point(size = 3, alpha = 0.7) +
  scale_color_viridis(option = "C") +
  theme_minimal() +
  labs(
    title = "Zależność: gęstość prądu i pojemność",
    x = "Current density (A/g)",
    y = "Capacitance (F/g)",
    color = "Electrolyte conc. (M)"
  )

ggplotly(p_cd_cap)

Wykres pokazuje, że pojemność silnie zależy od gęstości prądu: najwyższe wartości uzyskiwane są przy bardzo niskich obciążeniach, natomiast przy wyższych gęstościach prądu pojemność wyraźnie spada. Stężenie elektrolitu nie wykazuje jednoznacznego wpływu na wyniki.

8 Analiza skupień

8.1 Przygotowanie danych do klasteryzacji

cluster_vars <- data


preproc_cluster <- preProcess(
cluster_vars,
method = c("medianImpute", "center", "scale")
)

cluster_scaled <- predict(preproc_cluster, cluster_vars)

8.2 Dobór optymalnej liczby klastrów

nb <- NbClust(
data = cluster_scaled,
distance = "euclidean",
min.nc = 2,
max.nc = 6,
method = "kmeans",
index = "all"
)

## *** : The Hubert index is a graphical method of determining the number of clusters.
##                 In the plot of Hubert index, we seek a significant knee that corresponds to a 
##                 significant increase of the value of the measure i.e the significant peak in Hubert
##                 index second differences plot. 
## 

## *** : The D index is a graphical method of determining the number of clusters. 
##                 In the plot of D index, we seek a significant knee (the significant peak in Dindex
##                 second differences plot) that corresponds to a significant increase of the value of
##                 the measure. 
##  
## ******************************************************************* 
## * Among all indices:                                                
## * 5 proposed 2 as the best number of clusters 
## * 1 proposed 3 as the best number of clusters 
## * 2 proposed 4 as the best number of clusters 
## * 9 proposed 5 as the best number of clusters 
## * 6 proposed 6 as the best number of clusters 
## 
##                    ***** Conclusion *****                            
##  
## * According to the majority rule, the best number of clusters is  5 
##  
##  
## *******************************************************************
nb$Best.nc
##                     KL      CH Hartigan   CCC    Scott      Marriot   TrCovW
## Number_clusters 5.0000  5.0000   5.0000 6.000    5.000 5.000000e+00      5.0
## Value_Index     1.7972 83.1291  26.5018 1.945 1237.639 1.188713e+45 116209.4
##                  TraceW Friedman   Rubin Cindex     DB Silhouette   Duda
## Number_clusters   5.000   4.0000  5.0000 6.0000 6.0000      6.000 2.0000
## Value_Index     342.134   3.5337 -0.0304 0.2022 2.0276      0.157 1.0586
##                 PseudoT2   Beale Ratkowsky     Ball PtBiserial Frey McClain
## Number_clusters   2.0000  2.0000    5.0000    3.000     6.0000    1  2.0000
## Value_Index     -18.4953 -0.6098    0.2049 2626.547     0.3754   NA  0.6861
##                   Dunn Hubert SDindex Dindex   SDbw
## Number_clusters 4.0000      0  6.0000      0 2.0000
## Value_Index     0.0469      0  1.4084      0 1.0383

8.3 Klasteryzacja metodą k-means

k_opt <- 5  

km_res <- kmeans(cluster_scaled, centers = k_opt, nstart = 25)



data_clustered <- data %>%
filter(rowSums(is.na(cluster_vars)) < ncol(cluster_vars)) %>%
mutate(cluster = factor(km_res$cluster))

8.4 Wizualizacja klastrów

fviz_cluster(
km_res,
data = cluster_scaled,
geom = "point",
ellipse.type = "norm",
main = "Klastry materiałów (k-means)"
)

ggplot(data_clustered, aes(x = cluster, y = capacitance_f_g, fill = cluster)) +
geom_boxplot() +
labs(
x = "Klaster",
y = "Capacitance (F/g)",
title = "Pojemność właściwa w klastrach"
)

W analizie skupień dane zostały najpierw przygotowane poprzez imputację braków i standaryzację zmiennych, aby wszystkie cechy miały porównywalny wpływ na algorytm. Następnie, z wykorzystaniem pakietu NbClust, porównano wiele różnych kryteriów oceny jakości podziału i na tej podstawie wybrano optymalną liczbę klastrów. Większość indeksów wskazała, że najbardziej sensowny podział to pięć grup.

Zastosowanie metody k-means pozwoliło na wyodrębnienie pięciu odmiennych klastrów materiałów, różniących się parametrami strukturalnymi i elektrochemicznymi. Wizualizacja klastrów pokazała, że grupy te zajmują różne obszary przestrzeni cech, co oznacza, że algorytm wychwycił realne różnice między próbkami. Analiza pojemności w klastrach ujawniła, że niektóre grupy charakteryzują się wyraźnie wyższą pojemnością właściwą niż pozostałe, co może sugerować, że łączą one materiały o korzystnych parametrach i warunkach testowych.

9 Budowa i walidacja modelu predykcyjnego metodą random forest

9.1 Przygotowanie danych do modelowania

ml_data <- data

outer_idx <- createDataPartition(ml_data$capacitance_f_g, p = 0.7, list = FALSE)

train_outer <- ml_data[outer_idx, ]
test_outer <- ml_data[-outer_idx, ]

9.2 Trenowanie modelu

ctrl_inner <- trainControl(method = "cv", number = 5)


rf_model <- train(
capacitance_f_g ~ .,
data = train_outer,
method = "rf",
trControl = ctrl_inner,
preProcess = c("center", "scale"),
importance = TRUE
)

rf_model
## Random Forest 
## 
## 649 samples
##  15 predictor
## 
## Pre-processing: centered (15), scaled (15) 
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 519, 520, 518, 519, 520 
## Resampling results across tuning parameters:
## 
##   mtry  RMSE      Rsquared   MAE     
##    2    294.2645  0.5826311  177.5622
##    8    275.1092  0.6016187  155.4912
##   15    274.3868  0.6019019  153.8237
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was mtry = 15.

9.3 Ocena jakości modelu na zbiorze testowym

pred <- predict(rf_model, test_outer)
postResample(pred, test_outer$capacitance_f_g)
##        RMSE    Rsquared         MAE 
## 223.5621594   0.7609547 137.5280183

9.4 Ważność cech

varImp(rf_model)
## rf variable importance
## 
##                                                       Overall
## upper_limit_of_potential_window_v                     100.000
## lower_limit_of_potential_window_v                      89.854
## electrolyte_concentration_m                            75.902
## ratio_of_id_ig                                         53.261
## electrolyte_ionic_conductivity                         45.792
## current_density_a_g                                    37.045
## specific_surface_area_m_2_g                            32.998
## o_at_percent                                           30.929
## cell_configuration_three_two_electrode_system_encoded  18.006
## equivalent_series_resistance_rs_ohm                    16.930
## c_at_percent                                           11.785
## pore_volume_cm_3_g                                     11.257
## n_at_percent                                            6.524
## pore_size_nm                                            3.434
## charge_transfer_resistance_rct_ohm                      0.000
plot(varImp(rf_model), main = "Ważność cech w modelu Random Forest")

pred <- predict(rf_model, test_outer)

results_df <- data.frame(
  Actual = test_outer$capacitance_f_g,
  Predicted = pred
)



ggplot(results_df, aes(x = Actual, y = Predicted)) +
  geom_point(color = "steelblue", alpha = 0.7, size = 3) +
  geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed", size = 1) +
  theme_minimal(base_size = 13) +
  labs(
    title = "Wartości rzeczywiste vs przewidywane",
    subtitle = "Model Random Forest (ocena na zbiorze testowym)",
    x = "Pojemność rzeczywista (F/g)",
    y = "Pojemność przewidywana (F/g)"
  )

9.5 Wyliczenie błędów predykcji

pred <- predict(rf_model, test_outer)


MAE <- mean(abs(test_outer$capacitance_f_g - pred))


mean_capacitance <- mean(test_outer$capacitance_f_g, na.rm = TRUE)


error_percentage <- (MAE / mean_capacitance) * 100

cat("Średni błąd bezwzględny (MAE):", round(MAE, 2), "F/g\n")
## Średni błąd bezwzględny (MAE): 137.53 F/g
cat("Średnia pojemność w zbiorze testowym:", round(mean_capacitance, 2), "F/g\n")
## Średnia pojemność w zbiorze testowym: 410.46 F/g
cat("Średni błąd procentowy modelu:", round(error_percentage, 2), "%\n")
## Średni błąd procentowy modelu: 33.51 %

Model Random Forest został wytrenowany na danych podzielonych na część treningową i testową, z wykorzystaniem walidacji krzyżowej. Na zbiorze testowym uzyskał średni błąd około 137 F/g, co odpowiada ok. 33,5% średniej pojemności — oznacza to umiarkowaną dokładność predykcji. Analiza ważności cech pokazała, że największy wpływ na wyniki mają parametry związane z oknem potencjału, stężenie i przewodnictwo elektrolitu oraz gęstość prądu, natomiast cechy materiałowe odgrywają mniejszą rolę. Wyniki potwierdzają, że pojemność zależy głównie od warunków testowych, a duża niejednorodność danych ogranicza precyzję modelu.

10 Wnioski

  • Zbiór danych jest niejednorodny i zawiera wiele braków.

  • Zależności liniowe między zmiennymi są słabe.

  • Klasteryzacja ujawniła 5 wyraźnych grup materiałów, z których niektóre charakteryzują się wyższą pojemnością niż pozostałe.

  • Model Random Forest przewiduje pojemność ze średnim błędem ok. 33%, co wskazuje na umiarkowaną dokładność przy dużej zmienności danych.

  • Najważniejszymi cechami w modelu okazały się parametry związane z oknem potencjału, stężeniem i przewodnictwem elektrolitu oraz gęstością prądu.